package cn.lkk.samples.lang.fundamental;

/**
 * Created by lkk on 2015/5/11.
 */
public class DateTypes {
    public static void main(String[] args) {
        integerType();
        floatType();
        charType();
        booleanType();
    }

    /**
     * 演示整数的使用方法
     */
    public static void integerType() {
        byte aByte;  //1字节
        short aShort; //2字节
        int aInt;   //4字节
        long aLong;  //8字节

        // 原始数据默认为10进制数值，可以赋值给任意类型，可以通过前后缀指定其进制与类型
        aByte = 1;
        aShort = 1;
        aInt = 1;
        aLong = 1;

        // 通过后缀指定为long
        long longWithSuffix = 1L;

        // 指定后缀之后就不可以赋值给其他类型了，以下语句都会报错
        // int intWithSuffix=1L;
        // byte byteWithSuffix=1L;
        // short shortWithSuffix=1L;

        // 通过后缀指定其进制
        int oct = 010; //八进制，oct值为8
        int hex = 0x10; //十六进制，hex值为16
        System.out.println(String.format("oct=%1$s hex=%2$;", oct, hex));

    }

    /**
     * 演示浮点数的使用
     */
    public static void floatType() {
        float aFloat; //float类型，占用4字节，不常用，因为精度不够
        double aDouble; //double类型，占用float的两倍，8字节，通常使用这个类型

        // 数值1.1 默认就是double类型，所以无论是否转换都正确
        aDouble = 1.1;
        aDouble = 1.1D;
        aDouble = 1.1d;

        // 以下赋值语句会报错，因为1.1的类型为double，无法赋值给float，必须使用f后缀将原始值转换成浮点型
        //aFloat=1.1;
        aFloat = 1;     //因为数值1默认是int类型，int可以自动转换为float类型值
        aFloat = 1.1f;
        aFloat = 1.1F;
    }

    /**
     * 演示字符类型的使用
     */
    public static void charType() {
        //字符类型赋值
        char a = 'a';
        char b = '\u2122';
        char c = 48;
    }

    /**
     * 演示布尔类型的使用
     */
    public static void booleanType() {
        //可以赋值为 true 或者 false
        boolean trueValue = true;
        boolean falseValue = false;

        // 整型不能赋值给布尔类型
        //aBoolean=1;
    }
}
